﻿using B.S.InOut.Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace B.S.InOut.Data
{
    // 产品仓储接口，定义了对产品进行 CRUD 操作的方法
    public interface IProductRepository
    {
        // 插入产品的异步方法
        Task<int> InsertProductAsync(ProductModel product);
        // 根据 ID 获取产品的异步方法
        Task<ProductModel> GetProductByIdAsync(int id);
        // 获取所有产品的异步方法
        Task<IEnumerable<ProductModel>> GetAllProductsAsync();
        // 更新产品的异步方法
        Task<int> UpdateProductAsync(ProductModel product);
        // 根据 ID 删除产品的异步方法
        Task<int> DeleteProductAsync(int id);
        /// <summary>
        /// 多条件分页查询产品
        /// </summary>
        /// <param name="name">产品名称（可空，作为查询条件）</param>
        /// <param name="minPrice">最低价格（可空，作为查询条件）</param>
        /// <param name="maxPrice">最高价格（可空，作为查询条件）</param>
        /// <param name="pageNumber">页码</param>
        /// <param name="pageSize">每页显示的记录数</param>
        /// <returns>分页后的产品列表</returns>
        Task<IEnumerable<ProductModel>> GetProductsByConditionsAsync(string? ProductNum, string? ProductName, string? Category, int pageNumber, int pageSize );

        /// <summary>
        /// 批量删除产品
        /// </summary>
        /// <param name="productIds">要删除的产品 ID 列表</param>
        /// <returns>受影响的行数</returns>
        Task<int> DeleteProductsAsync(IEnumerable<int> productIds);
        /// <summary>
        /// 批量查询产品数据
        /// </summary>
        /// <param name="productIds">产品 ID 列表</param>
        /// <returns>产品数据的联合查询结果列表</returns>
        Task<IEnumerable<ProductModel>> GetProductModelsByIdsAsync(List<int> productIds);
    }
}
